home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
F1 Licenseware
/
F1 Licenseware - Volume 1.iso
/
disks
/
055a.dms
/
055a.adf
/
READERS_SOURCE.LHA
/
READERS_SOURCE
/
A_CAMPBELL
/
AJC-GRETCH-GAME.AMOS
/
AJC-GRETCH-GAME.amosSourceCode
next >
Wrap
AMOS Source Code
|
1992-02-26
|
6KB
|
322 lines
'
' "GRETCH" By Andrew Campbell 1994
'
' INSTRUCTIONS: By using the joystick-controlled dot, guide
' the bouncing balls into the flashing block. You have infinite
' lives but not infinite hair - don't pull it too hard.
'
' Yes I know it's an excuse of a game but who cares?
' Just play it and stop moaning.
'
' Cheers - AJC
'
Dim XP(50),YP(50),_DIR(50)
Global LVL,LVS,SCORE
Global XP(),YP(),_DIR()
REST:
Gosub TSCREEN
LVL=1 : LVS=5 : SCORE=0
RESTART:
Screen Open 0,320,256,8,Lowres : Curs Off : Flash Off : Hide On : Cls 0
Default Palette 0,0,0,0,0,0,0,0
Key Speed 10,1
NUMBER_OF_BALLS=LVL
Ink 2 : Box 0,0 To 319,199
GEN_LEVEL
Repeat
X=Rnd(310)+9 : Y=Rnd(190)+9
If Point(X,Y)=2 : Goto FINE : End If
Until DEATH=1
FINE:
CEN=1 : SPEEDY=0 : DEAD=0 : WON=0 : SLOW=0 : QUIT=0
_STARTX=0 : _STARTY=0 : _FINISHX=0 : _FINISHY=0
Auto View On : View
Fade 1,$0,$FFF,$F,$F0,$F,0,$FFF,0
Flash 7,"(444,5)(555,5)(666,5)(777,5)(888,5)(999,5)(AAA,5)(BBB,5)(CCC,5)(BBB,5)(AAA,5)(999,5)(888,5)(777,5)(666,5)"
GO_FOR_IT:
Plot X,Y,1
K$=""
Repeat
Update
K$=Inkey$
If K$>"" : QUIT=1 : End If
Gosub MALIEN
If SPEEDY=1
If DR=1 : Gosub GOIT : End If
If DR=2 : Gosub GOIT : End If
If DR=3 : Gosub GOIT : End If
If DR=4 : Gosub GOIT : End If
If Joy(1)<>-1
If Jup(1) : DR=1 : Gosub GOIT : End If
If Jright(1) : DR=2 : Gosub GOIT : End If
If Jdown(1) : DR=3 : Gosub GOIT : End If
If Jleft(1) : DR=4 : Gosub GOIT : End If
End If
End If
If SPEEDY=0
If Jup(1) : DR=1 : Gosub GOIT : End If
If Jright(1) : DR=2 : Gosub GOIT : End If
If Jdown(1) : DR=3 : Gosub GOIT : End If
If Jleft(1) : DR=4 : Gosub GOIT : End If
End If
Until DEAD=1 or WON=LVL or QUIT=1
If QUIT=1 : Goto REST : End If
If WON=LVL : Flash Off : Wait 30 : Fade 1,$FFF,$FFF,$FFF,$FFF,$FFF,$FFF,$FFF,$FFF,$FFF : Wait 30 : Inc LVL : End If
Goto RESTART
GOIT:
OX=X : OY=Y
If DR=1 : Dec Y : End If
If DR=2 : Inc X : End If
If DR=3 and Y<199 : Inc Y : End If
If DR=4 : Dec X : End If
If SPEEDY=0 : Gosub CHECKPOINT : End If
If SPEEDY=1 : Gosub CHECKPOINT2 : End If
Return
CHECKPOINT:
C=Point(X,Y)
If C=0
_STARTX=X : _STARTY=Y
SPEEDY=1
Return
Else If C<>2
X=OX : Y=OY
Return
Else
Plot OX,OY,2
Plot X,Y,1
End If
Return
CHECKPOINT2:
C=Point(X,Y)
If C=2
SPEEDY=0
_FINISHX=X : _FINISHY=Y
Gosub _FILL_IT_IN
Return
Else If C=1 or C=7
Sam Play 3
DEAD=1
Return
Else If C=0
Plot X,Y,1
End If
Return
MALIEN:
Inc CEN
If CEN>NUMBER_OF_BALLS : CEN=1 : End If
If XP(CEN)=0 and YP(CEN)=0 and _DIR(CEN)=0 : Return : End If
Plot XP(CEN),YP(CEN),0
If _DIR(CEN)=1 : Dec XP(CEN) : Dec YP(CEN) : End If
If _DIR(CEN)=2 : Inc XP(CEN) : Dec YP(CEN) : End If
If _DIR(CEN)=3 : Inc XP(CEN) : Inc YP(CEN) : End If
If _DIR(CEN)=4 : Dec XP(CEN) : Inc YP(CEN) : End If
Plot XP(CEN),YP(CEN),3
Gosub REBOUND
Return
REBOUND:
C1=Point(XP(CEN),YP(CEN)-1)
C2=Point(XP(CEN)+1,YP(CEN))
C3=Point(XP(CEN),YP(CEN)+1)
C4=Point(XP(CEN)-1,YP(CEN))
If C1=1 or C2=1 or C3=1 or C4=1 : DEAD=1 : Sam Play 3 : End If
If C1=7 or C2=7 or C3=7 or C4=7
Inc WON : Plot XP(CEN),YP(CEN),0 : XP(CEN)=0 : YP(CEN)=0 : _DIR(CEN)=0
A=$FFF : Palette A,A,A,A,A,A,A,A,A,A,A,A
Flash 7,"(444,5)(555,5)(666,5)(777,5)(888,5)(999,5)(AAA,5)(BBB,5)(CCC,5)(BBB,5)(AAA,5)(999,5)(888,5)(777,5)(666,5)"
Fade 1,$0,$FFF,$F,$F0,$F,0,$FFF,0
Sam Play 1
End If
If C4=2 and _DIR(CEN)=1 : _DIR(CEN)=2 : If SFX=1 : Sam Play 2 : End If : End If
If C4=2 and _DIR(CEN)=4 : _DIR(CEN)=3 : If SFX=1 : Sam Play 2 : End If : End If
If C2=2 and _DIR(CEN)=2 : _DIR(CEN)=1 : If SFX=1 : Sam Play 2 : End If : End If
If C2=2 and _DIR(CEN)=3 : _DIR(CEN)=4 : If SFX=1 : Sam Play 2 : End If : End If
If C1=2 and _DIR(CEN)=1 : _DIR(CEN)=4 : If SFX=1 : Sam Play 2 : End If : End If
If C1=2 and _DIR(CEN)=2 : _DIR(CEN)=3 : If SFX=1 : Sam Play 2 : End If : End If
If C3=2 and _DIR(CEN)=4 : _DIR(CEN)=1 : If SFX=1 : Sam Play 2 : End If : End If
If C3=2 and _DIR(CEN)=3 : _DIR(CEN)=2 : If SFX=1 : Sam Play 2 : End If : End If
Return
_FILL_IT_IN:
PTX=0 : PTY=0
Ink 2
Paint _STARTX,_STARTY
Plot X,Y,1
Return
TSCREEN:
SFX=0
Screen Open 0,320,256,8,Lowres : Curs Off : Flash Off : Hide On : Cls 0
Default Palette 0,0,0,0,0,0,0,0
Wait 30
Key Speed 10,1
Fade 1,$0,$FFF,$F,$F0,$F,0,$FFF,0
CEN=1
Ink 2 : Box 0,0 To 319,199
NUMBER_OF_BALLS=Rnd(10)+5
For I=1 To NUMBER_OF_BALLS
XP(I)=Rnd(300)+8 : YP(I)=Rnd(170)+8 : _DIR(I)=Rnd(3)+1
Next I
Paper 0 : Pen 2
Locate 0,8 : Centre "G R E T C H"
Locate 0,12 : Centre "(c) 1994 Black Dragon Design"
Locate 0,14 : Centre "PRESS FIRE TO PLAY"
K$=""
Repeat
K$=Inkey$
If K$<>"" : Fade 1 : Wait 15 : End : End If
Gosub MALIEN
Until Fire(1)
SFX=1
Return
'------------------
Procedure GEN_LEVEL
Randomize Timer
If LVL=1
Ink 2
Bar 0,0 To 290,43
Bar 0,0 To 70,127
Bar 166,128 To 320,199
Bar 177,63 To 201,128
Bar 177,42 To 201,50
Ink 7
Bar 1,128 To 35,198
XP(1)=310
YP(1)=14
End If
If LVL=2
Ink 2
Bar 22,0 To 146,86
Bar 11,119 To 84,192
Bar 84,35 To 255,60
Bar 160,166 To 320,199
Bar 177,42 To 201,50
Ink 7
Bar 212,90 To 221,99
XP(1)=298 : XP(2)=5
YP(1)=14 : YP(2)=5
End If
If LVL=3
Ink 2
Circle 146,86,10 : Paint 146,86,2
Circle 84,192,7 : Paint 84,192,2
Circle 200,100,10 : Paint 200,100,2
Ink 7
Bar 155,110 To 165,120
XP(1)=2 : YP(1)=2
XP(2)=312 : YP(2)=2
XP(3)=200 : YP(3)=2
End If
If LVL=4
Ink 2
Circle 100,86,13 : Paint 100,86,2
Circle 284,192,7 : Paint 284,192,2
Bar 0,0 To 20,20 : Bar 300,0 To 320,20
Ink 7
Bar 315,195 To 319,199
XP(1)=42 : YP(1)=42
XP(2)=52 : YP(2)=52
XP(3)=62 : YP(3)=62
XP(4)=72 : YP(4)=72
End If
If LVL>4 and LVL<10
Ink 2
Bar 0,150-(LVL*5) To 50+(10*LVL),199 : Bar 300,0 To 320,20
Ink 7
Circle 160,100,11-LVL : Paint 160,100,7
For I=1 To LVL : XP(I)=10*I : YP(I)=10 : Next I
End If
If LVL>9
Ink 2
R1=Rnd(310)+5 : R2=Rnd(190)+5
Circle R1,R2,Rnd(LVL)-5 : Paint R1,R2,2
Ink 7
R1=Rnd(310)+5 : R2=Rnd(190)+5
Ink 7 : Box R1,R2 To R1+10,R2+10
For I=1 To LVL
REE:
R1=Rnd(310)+5 : R2=Rnd(190)+5
C=Point(R1,R2)
If C<>0 : Goto REE : End If
XP(I)=R1 : YP(I)=R2
Next I
End If
For I=1 To LVL : _DIR(I)=Rnd(3)+1 : Next I
End Proc
'------------------